package top.bfylu.singleton.dcl;

/**
 * 包名: top.bfylu.singleton.dcl
 * 创建时间: 2022/1/29
 *
 * @author bfy
 * @version 1.0.0
 * <p>
 * 描述:双重检测加锁，在getInstance()中大大减少使用同步
 * @Email bfyjian@gmail.com
 **/
public class Singleton {
    /**
     * volatile关键字确保：当uniqueInstance变量被初始化成Singleton实例时，
     * 多个线程正确地处理uniqueInstance;
     */
    private volatile static Singleton uniqueInstance;

    private Singleton() {}

    public static Singleton getInstance() {
        //只有第一次才彻底执行这里额代码
        if (uniqueInstance == null) { //检测实例，如果不存在，就进入同步区块
            synchronized (Singleton.class) { //
                if (uniqueInstance == null) { // 进入区块后，再检测一次。如果任然是null，才创建实例
                    uniqueInstance = new Singleton();
                }
            }
        }
        return uniqueInstance;
    }

}
